home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
TPUG - Toronto PET Users Group
/
TPUG Users Group CD
/
TPUG Users Group CD.iso
/
C64
/
T-TPUG Old Monthly Disks
/
(c)tn.d64
/
disk utilities.c
(
.txt
)
< prev
next >
Wrap
Commodore BASIC
|
2007-02-04
|
9KB
|
291 lines
10 POKE53280,11:POKE53281,12:GOTO2770
20 PRINT"[147][151] ";
30 PRINT" [146]"
40 PRINT"[144] DISK UTILITIES BY DAN A. SIEBEN"
50 PRINT" 1 = SCRATCH (OR PURGE) PROGRAM"
60 PRINT" 2 = MERGE PROGRAMS":PRINT" 3 = RENAME PROGRAM"
70 PRINT" 4 = INITIALIZE DISK DRIVE":PRINT" 5 = FORMAT DISK"
80 PRINT" 6 = VALIDATE DISK"
90 PRINT" 7 = RENAME DISK":PRINT" 8 = WRITE-PROTECT DISK"
100 PRINT" 9 = PRINT DIRECTORY":PRINT" 0 = END"
110 PRINT" ENTER COMMAND (0-9)"
120 GETA$:A=VAL(A$):IFA<0ORA>9ORA$=""THEN120
130 IFA=0THENA=10
140 ONAGOTO150,950,750,2270,640,840,2130,2010,2340,940
150 CLR:RESTORE:REM SCRATCH PROGRAM
160 PRINT"[147]"SPC(13)"SCRATCH PROGRAM"
170 PRINT"LOAD DISK CONTAINING PROGRAM TO BE":PRINT"SCRATCHED, IN DRIVE, THEN:"
180 PRINT"'SPACE' TO EXECUTE OR 'S' TO STOP."
190 GETA$:IFA$<>"S"ANDA$<>" "THEN190
200 IFA$="S"THEN20
210 DR$="0":D=VAL(DR$):DR$="I"+DR$:OPEN15,8,15,DR$:GOSUB530
220 OPEN 1,8,3,"#":GOSUB540
230 PRINT:PRINT "PRESS 'Y[146]' TO DELETE (OR PURGE) FILE":PRINT
240 Z$=CHR$(0)
250 T=18:S=1
260 PRINT#15,"U1:"3;D;T;S
270 PRINT#15,"B-P:"3;2+32*R
280 GET#1,A$:IF A$="" THEN A$=Z$
290 IF ASC(A$)<129 THEN390
300 FOR K=5+32*R TO 20+32*R
310 PRINT#15,"B-P:"3;K
320 GET#1,A$:IF A$="" THEN PRINT" [146]";:GOTO340
330 PRINT A$;
340 NEXT
350 PRINT ,,"PURGE ? [146][157]";
360 GETA$:IFA$<>"Y" AND A$<>"N" THEN360
370 PRINT A$
380 IF A$="Y" THEN GOSUB480
390 R=R+1:IF R<8 THEN260
400 PRINT#15,"B-P:"3;0
410 GET#1,A$:IFA$="" THENA$=Z$
420 T=ASC(A$):IF T=0 THEN PRINT:PRINT "END OF DIRECTORY.":GOTO520
430 PRINT#15,"B-P:"3;1
440 GET#1,A$:IFA$=""THENA$=Z$
450 S=ASC(A$):PRINT:PRINT "*** NEXT TRACK: ";:NU=T:GOSUB600:PRINT N$;
460 PRINT TAB(20);"NEXT SECTOR: ";:NU=S:GOSUB600 :PRINT N$;" ***":PRINT
470 R=0:GOTO260
480 PRINT#15,"B-P:"3;5+32*R-3
490 PRINT#1,CHR$(0);
500 PRINT#15,"U2:"3;D;T;S
510 GOSUB540:RETURN
520 CLOSE15:CLOSE1:GOTO910
530 REM CHECK DISK STATUS
540 INPUT#15,ER,ER$,TR,SE
550 IF ER=0 THEN RETURN
560 CLOSE 15:CLOSE 1
570 PRINT:PRINT "DISK ERROR! ";
580 PRINT ER;ER$;TR;SE
590 GOTO920
600 REM FORMAT (null)S
610 N$=MID$(STR$(NU),2)
620 IF LEN(N$)<2 THEN N$="0"+N$
630 RETURN
640 CLR:RESTORE:REM FORMAT DISK
650 PRINT"[147] FORMATTING DISKS"
660 PRINT"REMEMBER: EVERYTHING ON THE DISK BEING [197][197][197][197][197][197][197][197] ";
670 PRINT"FORMATTED WILL BE DESTROYED.!"
680 PRINT"INSERT DISK DESIRED THEN:":PRINT"'SPACE' TO EXECUTE OR 'S' TO STOP."
690 GETA$:IFA$<>"S"ANDA$<>" "THEN690
700 IFA$="S"THEN20
710 INPUT"WHAT IS THE DISK NAME";D$
720 PRINT:INPUT"WHAT IS THE DISK ID";E$
730 OPEN15,8,15:PRINT#15,"N8:";D$",";E$:CLOSE15,8,15
740 GOTO910
750 CLR:RESTORE:REM RENAMING PROGRAMS
760 PRINT"[147]"SPC(11)"RENAMING PROGRAMS"
770 PRINT"ENTER DISK CONTAINING PROGRAM TO BE":PRINT"RENAMED, THEN:"
780 PRINT"'SPACE' TO EXECUTE OR 'S' TO STOP."
790 GETA$:IFA$<>"S"ANDA$<>" "THEN790
800 IFA$="S"THEN20
810 INPUT"WHAT FILE IS TO BE RENAMED";B$:INPUT"WHAT IS THE NEW FILE NAME";C$
820 OPEN15,8,15:PRINT#15,"R8:";C$"=";B$:CLOSE15,8,15
830 GOTO910
840 CLR:RESTORE:REM VALIDATING DISK
850 PRINT"[147]"SPC(12)"VALIDATING DISK"
860 PRINT"INSERT DISK DESIRED, THEN:"
870 PRINT"'SPACE' TO EXECUTE OR 'S' TO STOP."
880 GETQ$:IFQ$<>" "ANDQ$<>"S"THEN880
890 IFQ$="S"THEN20
900 PRINT"VALIDATING........":OPEN15,8,15:PRINT#15,"V":CLOSE15,8,15:GOTO910
910 PRINT"COMPLETE.":GOTO930
920 PRINT"FUNCTION NOT COMPLETED!!"
930 FOREE=1TO4000:NEXT:GOTO20
940 END
950 CLR:RESTORE:REM MERGING PROGRAMS
960 DIMA(500),A$(500),N$(1)
970 MP=2049:PRINT"[147]"SPC(13)"MERGE PROGRAMS"
980 PRINT"ENTER DISK CONTAINING BOTH PROGRAMS":PRINT"TO BE MERGED, THEN: [197][197][197][197]
990 [153]"'SPACE' TO EXECUTE OR 'S' TO STOP."
1000 [161]A$:[139]A$[179][177]"S"[175]A$[179][177]" "[167]1000
1010 [139]A$[178]"S"[167]20
1020 [133]"NAME OF ORIGINAL PROGRAM";N$(0)
1030 [153]:[133]"NAME OF PROGRAM TO MERGE";N$(1)
1040 S$[178]N$(0)
1050 [133]"SAVE UNDER WHAT NAME";S$
1060 [159]15,8,15
1070 [152]15,"I"
1080 X[178]0:[141]1180:E1[178]P[171]1:P2[178]P:X[178]1:[141]1180:E2[178]P[171]1
1090 [153]"SAVING ";S$
1100 [159]2,8,2,"@0:"[170]S$[170]",P,W":[141]1350
1110 [152]2,[199](1);[199](8);
1120 [139]A(P2)[178]A(P1)[167]Z[178]P1:P1[178]P1[170]1:P2[178]P2[170]1:[137]1150
1130 [139]A(P2)[179]A(P1)[167]Z[178]P2:P2[178]P2[170]1:[137]1150
1140 [139]A(P2)[177]A(P1)[167]Z[178]P1:P1[178]P1[170]1
1150 MP[178]MP[170][195](A$(Z))[170]2:X[178][181](MP[173]256):Y[178]MP[171]256[172]X
1160 [152]2,[199](Y);[199](X);A$(Z);:[139]P1[179]E1[176]P2[179]E2[167]1120
1170 [152]2,[199](0);[199](0);:[160]2:[160]15:[137]910
1180 [153]"LOADING "N$(X)
1190 [159]2,8,2,"0:"[170]N$(X)[170]",P,R"
1200 [141]1350
1210 [161]#2,A$,B$
1220 [161]#2,A$,B$
1230 [139]A$[178]""[175]B$[178]""[167]A(P)[178]65000:P[178]P[170]1:[160]2:[142]
1240 [161]#2,A$
1250 [139]A$[178]""[167]A$[178][199](0)
1260 X[178][198](A$):A$(P)[178]A$
1270 [161]#2,A$
1280 [139]A$[178]""[167]A$[178][199](0)
1290 A(P)[178]X[170]256[172][198](A$):A$(P)[178]A$(P)[170]A$
1300 [161]#2,A$
1310 [139]A$[178]""[167]A$[178][199](0)
1320 A$(P)[178]A$(P)[170]A$:[139]A$[179][177][199](0)[167]1300
1330 P[178]P[170]1
1340 [137]1220
1350 [132]15,EN,EM$,ET,ES
1360 [139]EN[178]0[167][142]
1370 [153]"DISK ERROR"
1380 [153]EN;EM$;ET;ES
1390 [160]2:[160]15
1400 [137]920
1410 [156]:[140]:[143] PRINT DIRECTORY
1420 [153]"LOAD"[166]11)"PRINT DIRECTORIES":[153]"INSERT DISK DESIRED, THEN:"
1430 [153]"'SPACE' TO EXECUTE OR 'S' TO STOP."
1440 [161]Q$:[139]Q$[179][177]" "[175]Q$[179][177]"S"[167]1440
1450 [139]Q$[178]"S"[167]20
1460 [139]Y[178]2[176]Y[178]3[167]2430
1470 [134]FX$(256),FT$(256),FL(256),TT(256):N[178][171]1:[129]I[178]1[164]256:FX$(I)[178]"":[130]:X[178]221
1480 BL$[178]" ":[129]I[178]1[164]40:BL$[178]BL$[170]"CLOSE":[130]:[160]15:[159]15,8,15:[159]1,8,0,"$0"
1490 [141]1870:[161]#1,A$,B$
1500 W[178]51:L$[178]"":[133]"PRINTOUT HEADER";L$
1510 [139][195](L$)[177]22[167][153]"HEADER TOO LONG-MAXIMUM 22 CHARACTERS.":[137]1500
1520 [161]#1,A$,B$:[161]#1,A$,B$:C[178]0:[139]A$[179][177]""[167]C[178][198](A$)
1530 [139]B$[179][177]""[167]C[178]C[170][198](B$)[172]256
1540 N[178]N[170]1:FL(N)[178]C
1550 [161]#1,B$:[139]ST[179][177]0[167]1640
1560 [139]B$[179][177][199](34)[167]1550
1570 N$[178]""
1580 [161]#1,B$:[139]B$[179][177][199](34)[167]N$[178]N$[170]B$:[137]1580
1590 FX$(N)[178]N$
1600 [161]#1,B$:[139]B$[178][199](32)[167]1600
1610 C$[178]""
1620 C$[178]C$[170]B$:[161]#1,B$:[139]B$[179][177]""[167]1620
1630 FT$(N)[178][200](C$,3):[139]ST[178]0[167]1520
1640 [160]1:BF[178]FL(N):N[178]N[171]1:[143] GOSUB1910
1650 [133]"ALPHABETICALLY SORTED (Y/N) CMDCMDCMD";G$
1660 [139]G$[179][177]"N"[175]G$[179][177]"Y"[167][153]"ONON";:[137]1650
1670 [141]1970
1680 [160]3:[159]3,4:[153]"PRINTING DIRECTORY"
1690 [152]3,[199](176);:[129]I[178]1[164]51:[152]3,[199](192);:[130]:[152]3,[199](174)
1700 [152]3,[199](X);[166]51);[199](X)
1710 T2$[178]FX$(0):[139]L$[179][177]""[167]T2$[178]T2$[170]" CLOSE("[170]L$[170]")"
1720 T$[178][199](X)[170]" >>> "[170]FX$(0)
1730 [139]L$[178]""[167]T$[178]T$[170][202](BL$,1,W[171][195](T$)[171]1):[137]1750
1740 K[178]W[171]2[171][195](T$)[171][195](L$):T$[178]T$[170][202](BL$,1,K[171]1)[170]"("[170]L$[170]")"
1750 T$[178]T$[170]" "[170][199](X):[152]3,T$
1760 [152]3,[199](X);[166]51);[199](X)
1770 [152]3,[199](171);:[129]I[178]1[164]51:[152]3,[199](192);:[130]:[152]3,[199](179)
1780 [152]3,[199](X);[166]51);[199](X):L[178]9:K[178][181]((N[170]1)[173]2):[129]I[178]1[164]K
1790 T$[178][199](X):J[178]I:[141]1910:T$[178]T$[170]" ":J[178]K[170]I:[141]1910:T$[178]T$[170]" "[170][199](X)
1800 [152]3,T$:L[178]L[170]1:[130]:[152]3,[199](X);[166]51);[199](X)
1810 P[178][181]((BF[172]100[173]664)[170].5):P$[178][202]([196](P),2)
1820 T$[178][199](X)[170][202](BL$,1,14)[170][196](BF)[170]" BLOCKS ("[170]P$[170]"%) FREE"
1830 T$[178]T$[170][202](BL$,1,W[171][195](T$)[170]1)[170][199](X):[152]3,T$
1840 [129]I[178]L[164]27:[152]3,[199](X);[166]51);[199](X):[130]
1850 [152]3,[199](173);:[129]I[178]1[164]51:[152]3,[199](192);:[130]:[152]3,[199](189)
1860 [152]3:[160]3:[160]15:[137]910
1870 [132]15,ER,ER$:[139]ER[179]20[167][142]
1880 [139]EF[178]74[176]ER[178]21[167]ER$[178]ER$[170]"--IS DISK INSERTED?":[137]1900
1890 ER$[178]"DISK ERROR"[170][196](ER)[170]": "[170]ER$
1900 [153]ER$:[137]920
1910 T[178]TT(J):[139]T[178]0[167]T$[178]T$[170][202](BL$,1,24):[142]
1920 [139]FL(T)[179]100[167]T$[178]T$[170]"CLOSE"
1930 [139]FL(T)[179]10[167]T$[178]T$[170]"CLOSE"
1940 T$[178]T$[170][202]([196](FL(T)),2)[170]"CLOSE"[170]FX$(T)
1950 [139][195](FX$(T))[179]16[167]T$[178]T$[170][202](BL$,1,16[171][195](FX$(T)))
1960 T$[178]T$[170]"CLOSE"[170][200](FT$(T),3):[142]
1970 [129]I[178]1[164]N:TT(I)[178]I:[130]:[139]G$[178]"N"[167][142]
1980 [129]I[178]1[164]N[171]1:S[178]I:[129]J[178]I[170]1[164]N:[139]FX$(TT(J))[179]FX$(TT(S))[167]S[178]J
1990 [130]J:[139]S[179][177]I[167]T[178]TT(I):TT(I)[178]TT(S):TT(S)[178]T
2000 [130]I:[142]
2010 [156]:[140]:[143] DISK PROTECTION
2020 [153]"LOAD"[166]11)"WRITE-PROTECT DISK"
2030 [153]"NOTE: A WRITE-PROTECTED DISKS DOES NOT"
2040 [153]"ALLOW ANY SAVES TO IT, AND ONLY REFOR- MATTING WILL REVERSE IT."
2050 [153]"INSERT DISK TO WRITE-PROTECT, THEN:"
2060 [153]"'SPACE' TO BEGIN OR 'S' TO STOP."
2070 [161]A$:[139]A$[179][177]" "[175]A$[179][177]"S"[167]2070
2080 [139]A$[178]"S"[167]20
2090 [159]15,8,15,"I":[159]8,8,8,"#"
2100 [152]15,"UA:8,0,18,0":[152]15,"B-P:8,2"
2110 [152]8,[199](1);:[152]15,"UB,8,0,18,0"
2120 [152]15,"I":[160]8:[160]15:[137]910
2130 [156]:[140]:[143] RENAME DISK
2140 [153]"LOAD"[166]14)"RENAME DISK"
2150 [153]"ENTER DISK TO BE RENAMED, THEN:"
2160 [153]"'SPACE' TO EXECUTE OR 'S' TO STOP."
2170 [161]A$:[139]A$[179][177]"S"[175]A$[179][177]" "[167]2170
2180 [139]A$[178]"S"[167]20
2190 [159]15,8,15:[159]2,8,2,"#":[141]2240:NN$[178]DN$
2200 [133]"NEW NAME";NN$:[139][195](NN$)[177]16[167][153][163]14)"TOO LONG!WAIT":[137]2200
2210 NN$[178]NN$[170]"CLOSECLOSECLOSECLOSECLOSECLOSECLOSECLOSECLOSECLOSECLOSECLOSECLOSECLOSECLOSECLOSE":[152]15,"B-P";2;144
2220 [152]2,[200](NN$,16);:[152]15,"U2:";2;0;18;0:[141]2240
2230 [152]15,"IO":[160]2:[160]15:[137]910
2240 [152]15,"U1:";2;0;18;0:[152]15,"B-P:";2;144:DN$[178]""
2250 [129]I[178]1[164]16:[161]#2,A$:DN$[178]DN$[170]A$:[130]
2260 [153]"DISK NAME IS: "DN$:[142]
2270 [156]:[140]:[143] INITIALIZING DISK
2280 [153]"LOAD"[166]8)"INITIALIZING DISK DRIVE"
2290 [153]"THIS WILL RESTORE THE DISK DRIVE TO ITS ORIGINAL POWER-ON STATE. SIM
2300 PRINT"HIT 'SPACE' TO EXECUTE OR 'S' TO STOP."
2310 GETQ$:IFQ$<>" "ANDQ$<>"S"THEN2310
2320 IFQ$="S"THEN20
2330 PRINT"INITIALIZING........":OPEN15,8,15:PRINT#15,"I":CLOSE15,8,15:GOTO910
2340 CLR:RESTORE:REM PRINT DIRECTORY
2350 PRINT"[147]"SPC(11)"PRINT DIRECTORIES"
2360 PRINT"THIS PROGRAM WILL ALPHABETIZE AND PRINT"
2370 PRINT"THE DIRECTORY OF ANY DISK. CHOOSE ONE:"
2380 PRINT" 1 = PRINT DISK SIZE ON PRINTER":PRINT" 2 = PRINT SHEET FORM";
2390 PRINT" ON PRINTER":PRINT" 3 = PRINT ON SCREEN":PRINT" 4 = RETURN TO MAIN MENU"
2400 GETA$:IFA$<"1"ORA$>"4"ORA$=""THEN2400
2410 Y=VAL(A$):ONYGOTO1410,2420,2420,20
2420 GOTO1420
2430 PRINT"[145]USE 'SHIFT' KEY TO SLOW PRINTING, OR HIT'SHIFT LOCK' TO STOP IT."
2440 PRINT"READING THE DIRECTORY":DIMF$(144):B=6:C=2:Q$=CHR$(34):R$=""
2450 SP$=" "
2460 OPEN1,8,0,"$":GET#1,A$,B$
2470 GET#1,A$,B$:GET#1,A$,B$:NB=ASC(A$+CHR$(0))+256*ASC(B$+CHR$(0))
2480 GET#1,B$:IFST<>0THEN2560
2490 IFB$<>CHR$(34)THEN2480
2500 GET#1,B$:IFB$<>CHR$(34)THENS$=S$+B$:GOTO2500
2510 GET#1,B$:IFB$=CHR$(32)THEN2510
2520 C$="":IFA=0THENC$=" "
2530 C$=C$+B$:GET#1,B$:IFB$<>""THEN2530
2540 F$(A)=LEFT$(R$+Q$+S$+Q$+SP$,19)+LEFT$(C$,B)+MID$(STR$(NB)+SP$,2,C)
2550 S$="":R$="":A=A+1:B=3:C=5:IFST=0THEN2470
2560 CLOSE1:N=A-1:BF$=MID$(STR$(NB)+" BLOCKS FREE,"+STR$(N)+" FILES.",2)
2570 INPUT"ALPHABETICALLY SORTED (Y/N) [157][157][157]";G$:IFG$="N"THEN2680
2580 IFG$<>"Y"THENPRINT"[145][145]";:GOTO2570
2590 M=N
2600 M=INT(M/2):IFM=0THEN2680
2610 J=1:K=N-M
2620 I=J
2630 L=I+M:CM=CM+1:IFF$(I)<F$(L)THEN2660
2640 T$=F$(I):F$(I)=F$(L):F$(L)=T$:SW=SW+1:I=I-M:IFI<1THEN2660
2650 GOTO2630
2660 J=J+1:IFJ>KTHEN2600
2670 GOTO2620
2680 IFY=2THENOPEN4,4:PRINT"PRINTING DIRECTORY":CMD4
2690 IFY=3THENPRINT"[147]"
2700 C=2:FORI=0TON:PRINTRIGHT$(F$(I),C)LEFT$(F$(I),LEN(F$(I))-C):C=5
2710 IFPEEK(653)THEN2710
2720 NEXT:PRINTBF$:IFY=2THENPRINT:PRINT:PRINT:PRINT#4:CLOSE4:GOTO2760
2730 PRINT"HIT ANY KEY TO RETURN TO THE MAIN MENU."
2740 GETY$:IFY$=""THEN2740
2750 GOTO20
2760 GOTO910
2770 VE=0:PRINT"[147]";
2780 PRINT"[151] ";
2790 PRINT" [146]"
2800 M$="DISK UTILITIES "
2810 PRINT"[144]";:FORX=1TOLEN(M$)
2820 QQ=ASC(MID$(M$,X,1)):IFQQ=46ORQQ=32THENK=K+1:CH=QQ:GOTO2840
2830 FORCH=64TOQQ:REMASC(MID$(M$,X,1))
2840 IFQQ=46THENCH=46
2850 IFCH>127ANDCH<>46ANDCH<160THENCH=160
2860 POKE214,VE:PRINT
2870 PRINTTAB(X+(39-LEN(M$))/2);
2880 PRINTCHR$(CH);:IFK>0THENK=0:NEXTX:GOTO2990
2890 NEXTCH,X
2990 PRINT"BY DAN A. SIEBEN":GOTO50